package componentes;

import java.awt.image.BufferedImage;

import ar.edu.unq.games.vainillautils.Vector2D;

import com.uqbar.metalGear.MGSScene;
import com.uqbar.vainilla.DeltaState;
import com.uqbar.vainilla.GameComponent;
import com.uqbar.vainilla.appearances.Sprite;
import com.uqbar.vainilla.colissions.CollisionDetector;

import comportamiento.ControlesPJ;

public abstract class Componente extends GameComponent<MGSScene>{
	
	private ControlesPJ controles;
	private double velocidad;
	private double xAnterior;
	private double yAnterior;
	private double x2Anterior;
	private double y2Anterior;
	
	public Componente(int x, int y, BufferedImage imagen, ControlesPJ controles, double velocidad){
		
		
		super(new Sprite(imagen), x, y);
		this.controles = controles;
		this.velocidad = velocidad;
	}

	@Override
	public void update(DeltaState deltaState) {
				
		//probando cosas locas
		
		this.setX2Anterior(this.getxAnterior());
		this.setY2Anterior(this.getyAnterior());
		
		///////
		
		this.setyAnterior(this.getY());
		this.setxAnterior(this.getX());
		this.controles.update(this, this.getScene(), deltaState);
		super.update(deltaState);
	}
	
	public Boolean hayColision(Personaje p){
		
		return CollisionDetector.INSTANCE.collidesRectAgainstRect
		(this.getX(), this.getY(),
		(int)this.getAppearance().getWidth(), (int)this.getAppearance().getHeight(),
		p.getX(), p.getY(),
		(int)p.getAppearance().getWidth(), (int)p.getAppearance().getHeight());
	}
	
	public void derecha(double delta) {
		this.setX(this.getX() - getVelocidad()*delta);
	}
	
	public void izquierda(double delta) {
		this.setX(this.getX() + getVelocidad()*delta);
	}
	
	public void abajo(double delta){
		this.setY(this.getY() - getVelocidad()*delta);	
	}
	
	public void arriba(double delta) {
		this.setY(this.getY() + getVelocidad()*delta);
	}

	public double getVelocidad() {
		return velocidad;
	}

	public void setVelocidad(double velocidad) {
		this.velocidad = velocidad;
	}

	public double getxAnterior() {
		return xAnterior;
	}

	public void setxAnterior(double xAnterior) {
		this.xAnterior = xAnterior;
	}

	public double getyAnterior() {
		return yAnterior;
	}

	public void setyAnterior(double d) {
		this.yAnterior = d;
	}

	public double getX2Anterior() {
		return x2Anterior;
	}

	public void setX2Anterior(double x2Anterior) {
		this.x2Anterior = x2Anterior;
	}

	public double getY2Anterior() {
		return y2Anterior;
	}

	public void setY2Anterior(double y2Anterior) {
		this.y2Anterior = y2Anterior;
	}	
    
	
}
